home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0016_TEXTWDTH.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  2KB  |  76 lines

  1. { Keld Hansen }
  2. Procedure SetCrtC; NEAR; Assembler;
  3. Const
  4.   HorizParms : Array[1..2,1..7] of Word =
  5.                (($6A00,$5901,$5A02,$8D03,$6004,$8505,$2D13),
  6.                 ($5F00,$4F01,$5002,$8203,$5504,$8105,$2813));
  7. Asm
  8.   PUSH    DX
  9.   MOV     DX,ES:[0063h]
  10.   PUSH    BX
  11.   MOV     AX,1110h
  12.   xor     CX,CX
  13.   INT     10h
  14.   POP     BX
  15.   MOV     AL,11h
  16.   OUT     DX,AL
  17.   INC     DX
  18.   in      AL,DX
  19.   DEC     DX
  20.   MOV     AH,AL
  21.   MOV     AL,11h
  22.   PUSH    AX
  23.   and     AH,7Fh
  24.   OUT     DX,AX
  25.   xor     BH,BH
  26.   SUB     BL,8
  27.   NEG     BX
  28.   and     BX,14
  29.   LEA     SI,[BX+OFFSET HorizParms]
  30.   MOV     CX,7
  31. @LOOP:  LODSW
  32.   OUT     DX,AX
  33.   LOOP    @LOOP
  34.   POP     AX
  35.   OUT     DX,AX
  36.   POP     DX
  37. end;
  38.  
  39. Procedure SetCharWidth(W : Word); Assembler;
  40. Asm
  41.   MOV     ES,Seg0040
  42.   MOV     BL,Byte PTR W
  43.   MOV     BH,ES:[0085h]
  44.   CALL    SetCrtC
  45.   MOV     DX,03C4h
  46.   MOV     AX,0100h
  47.   CLI
  48.   OUT     DX,AX
  49.   MOV     BX,0001h
  50.   CMP     W,8
  51.   JE      @L01
  52.   MOV     BX,0800h
  53. @L01:       MOV     AH,BL
  54.   MOV     AL,1
  55.   OUT     DX,AX
  56.   MOV     AX,0300h
  57.   OUT     DX,AX
  58.   STI
  59.   MOV     BL,13h
  60.   MOV     AX,1000h
  61.   INT     10h
  62.   MOV     AX,1000h
  63.   MOV     BX,0F12h
  64.   INT     10h
  65.   xor     DX,DX
  66.   MOV     AX,720
  67.   div     W
  68.   MOV     ES:[004Ah],AX
  69. end;
  70.  
  71. {
  72. SetCharWidth can then be called With 8 (giving 90 Characters per line) or 9
  73. (giving 80 Characters per line) after having switched into f.ex. 80x28 (by
  74. selecting the appropriate number of scan lines and font size).
  75. }
  76.